package com.lzx.library.rx.parser;

import com.lzx.library.rx.bean.BaseBean;
import com.lzx.library.rx.bean.BaseListBean;

import org.jetbrains.annotations.NotNull;

import java.io.IOException;
import java.lang.reflect.Type;

import rxhttp.wrapper.annotation.Parser;
import rxhttp.wrapper.exception.ParseException;
import rxhttp.wrapper.parse.TypeParser;
import rxhttp.wrapper.utils.Converter;

/**
 * 作者 : 刘鹏
 * 创建日期 : 2021/7/28 9:39
 * 描述 : ResponseParser
 */
@Parser(name = "Response", wrappers = {BaseListBean.class})
public class ResponseParser<T> extends TypeParser<T> {
    //该构造方法是必须的
    protected ResponseParser() {
        super();
    }

    //如果依赖了RxJava，该构造方法也是必须的
    public ResponseParser(Type type) {
        super(type);
    }

    @Override
    public T onParse(@NotNull okhttp3.Response response) throws IOException {
        //将okhttp3.Response转换为自定义的Response对象
        BaseBean<T> data = Converter.convertTo(response, BaseBean.class, types);  //这里的types就是自定义Response<T>里面的泛型类型
        T t = data.getBody();
        if (data.getCode() != 200 || t == null) {//这里假设code不等于200，代表数据不正确，抛出异常
            throw new ParseException(String.valueOf(data.getCode()), data.getMsg(), response);
        }
        return t;
    }
}